"use strict";

/**
 * 校验是否车牌号
 *
 * @since 0.0.4
 * @category 正则
 * @param {string|number} str 需要校验的字符串.
 * @param {object} config 配置参数.
 * @param {boolean} config.isDetail 是否返回详细信息, 为true时返回CheckResult, false时返回boolean 默认: false.
 * @param {string} config.type 车辆类型，'head'-仅校验车头，'tail'-仅校验车挂，默认为空，匹配所有车辆类型，1.1.0新增.
 *
 * @returns { boolean|CheckResult } 校验结果 或 结果对象.
 *
 * @typedef {object} CheckResult
 * @property {boolean} status 校验结果
 * @property {string} errorMsg 错误提示
 * @property {RexExp} reg 校验数据使用的RexExp对象
 *
 * @example
 *
 * z.isLicensePlateNumber('豫N9603F')
 * // => true
 *
 * z.isLicensePlateNumber('豫N9603F', { isDetail: true })
 * // => { status: true, errorMsg: '', reg: /^...$/ }
 *
 * z.isLicensePlateNumber('豫N9603FA')
 * // => false
 *
 * z.isLicensePlateNumber('豫N9603FF')
 * // => true, 因为触发了大型新能源车牌照规则
 *
 * z.isLicensePlateNumber('豫N9603F', { type: 'head' })
 * // => true
 *
 * z.isLicensePlateNumber('豫N9603F', { type: 'tail' })
 * // => false
 */
function isLicensePlateNumber(str) {
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
      _ref$isDetail = _ref.isDetail,
      isDetail = _ref$isDetail === void 0 ? false : _ref$isDetail,
      _ref$type = _ref.type,
      type = _ref$type === void 0 ? '' : _ref$type;

  var rt = {
    status: false,
    errorMsg: ''
  };
  if (typeof str === 'number') str = "".concat(str);
  var regs = ['^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使][A-Z]([0-9a-zA-Z]{4}[挂警学领港澳0-9a-zA-Z]|[DF][0-9a-zA-Z]{5}|[0-9a-zA-Z]{5}[DF])$', '^WJ[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]?[0-9a-zA-Z]{5}$' // 武警车
  ];
  var headRegs = ['^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使][A-Z]([0-9a-zA-Z]{4}[警学领港澳0-9a-zA-Z]|[DF][0-9a-zA-Z]{5}|[0-9a-zA-Z]{5}[DF])$', '^WJ[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新]?[0-9a-zA-Z]{5}$' // 武警车
  ];
  var tailRegs = ['^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新][A-Z][0-9a-zA-Z]{4}[挂]{1}$' // 车挂
  ];

  if (type === 'head') {
    regs = headRegs;
  } else if (type === 'tail') {
    regs = tailRegs;
  }

  rt.reg = new RegExp(regs.join('|'));

  if (typeof str !== 'string') {
    rt.errorMsg = '类型错误';
    return isDetail ? rt : rt.status;
  }

  if (!rt.reg.test(str)) {
    rt.errorMsg = '格式错误!';
  } else {
    rt.status = true;
  }

  return isDetail ? rt : rt.status;
}

module.exports = isLicensePlateNumber;